"""
需求：
    1、存储数据的位置：Student.data

    2、系统功能：
        添加学生
        删除学生
        修改学生
        查询学员信息
        显示所有学生信息
        退出系统
"""
from Student import *


class StudentManager(object):
    def __init__(self):
        # 存储数据所用的列表
        self.students_list = []

    # 一、程序入口函数，启动程序后执行的函数
    def run(self):
        # 1、加载数据
        self.load_studnts()

        while True:
            # 2、显示功能菜单
            self.show_menu()

            # 3、用户输入功能序号
            menu_num = eval(input('请输入您要选择的功能序号：\n'))

            # 4、根据用户输入的功能序号执行不同的功能
            if menu_num == 1:
                # 添加学员
                self.add_student()
            elif menu_num == 2:
                # 删除学员
                self.del_student()
            elif menu_num == 3:
                # 修改学员
                self.modify_student()
            elif menu_num == 4:
                # 查询学员信息
                self.search_student()
            elif menu_num == 5:
                # 显示所有学员信息
                self.show_students()
            elif menu_num == 6:
                # 保存学员信息
                self.save_student()
            elif menu_num == 7:
                # 退出系统
                print('欢迎下次使用')
                break

    def load_studnts(self):
        """ 加载学生信息 """
        # 以r方式读取文件，文件存在则读取，不存在则创建
        try:
            f = open('Student.data', 'r')
        except:
            f = open('Student.data', 'w')
        else:
            # 读取数据
            data = f.read()

            new_list = eval(data)

            self.students_list = [Student(dict['name'], dict['gender'], dict['phone']) for dict in new_list]

        finally:
            f.close()

    @staticmethod
    def show_menu():
        """ 显示功能菜单 -- 静态 """
        print('请选择如下功能----')
        print('1、添加学员')
        print('2、删除学员')
        print('3、修改学员信息')
        print('4、查询学员信息')
        print('5、显示所有学员信息')
        print('6、保存学员信息')
        print('7、退出系统')
        print('--------------')

    def add_student(self):
        """ 添加学员 """
        # 1、用户输入姓名，性别，手机号
        name = input('请输入要添加的学生姓名：')
        gender = input('请输入要添加的学生性别：')
        phone = input('请输入要添加的学生手机号：')

        # 2、创建学生对象 -- 导入Student.py
        stu = Student(name, gender, phone)

        # 3、将学生添加至列表
        self.students_list.append(stu)

    def del_student(self):
        """ 删除学员 """
        # 1、用户输入要删除的学员姓名
        del_name = input('请输入您要删除的学生姓名：')

        # 2、存在则删除，不存在则提示
        for stu in self.students_list:
            if del_name == stu.name:
                self.students_list.remove(stu)
                print('删除成功！')
                break
        else:
            print('查无此人')

    def modify_student(self):
        """ 修改学员信息 """
        # 1、用户输入要修改的学生姓名
        modify_name = input('请输入您要修改的学生姓名：')

        # 2、存在则修改，不存在则提示
        for stu in self.students_list:
            if modify_name == stu.name:
                stu.name = input('请输入修改之后的学生姓名：')
                stu.gender = input('请输入修改之后的学生性别：')
                stu.phone = input('请输入修改之后的学生手机号：')

                print(f'修改成功：姓名：{stu.name}, 性别：{stu.gender}, 手机号：{stu.phone}')
                break

        else:
            print('查无此人！')

    def search_student(self):
        """ 查询学员信息 """
        # 1、用户输入要查询的学生姓名
        modify_name = input('请输入您要查询的学生姓名：')

        # 2、存在则显示，不存在则提示
        for stu in self.students_list:
            if modify_name == stu.name:
                print(f'姓名：{stu.name}, 性别：{stu.gender}, 手机号：{stu.phone}')
        else:
            print('查无此人！')

    def show_students(self):
        """ 显示学员信息 """
        print('姓名\t性别\t手机号')
        for stu in self.students_list:
            print(f'{stu.name}\t{stu.gender}\t{stu.phone}')

    def save_student(self):
        """ 保存学员信息 """
        # 1、打开文件
        f = open('Student.data', 'w')

        # 2、文件写入学员数据
        # 注意：文件写入的数据不能是学生对象的内存地址，需要把学生数据转化成字典数据存储
        new_list = [stu.__dict__ for stu in self.students_list]

        # 注意：文件内数据要求字符串类型
        f.write(str(new_list))

        # 3、关闭文件
        f.close()
